package com.qiufenfen.cloud.order.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
// @LoadBalancerClients: 用于配置多个负载均衡客户端的注解容器
// @LoadBalancerClient: 用于配置单个负载均衡客户端
// name = "my-cloud-user": 指定需要应用负载均衡的服务名称为 my-cloud-user
// CustomLoadBalancerConfiguration.class: 指定使用 CustomLoadBalancerConfiguration 类作为该服务的负载均衡配置
@LoadBalancerClients(value = @LoadBalancerClient(name = "my-cloud-user",
        configuration = CustomLoadBalancerConfiguration.class))
public class RestTemplateConfiguration {
    // 区别1：
    // @Component 用于类级别，标记一个类为Spring组件
    // @Bean 用于方法级别，标记一个方法返回的对象为Spring组件
    // 区别2：
    // @Component 自动扫描注册，Spring 会自动发现并注册带有此注解的类
    // @Bean 手动注册，通过在 @Configuration 配置类中的方法返回对象实例
    // 区别3：
    // @Component: 适用于自定义的业务组件、服务类等
    // @Bean: 适用于第三方库的 Bean 注册、需要特殊初始化逻辑的 Bean 等
    @Bean
    @LoadBalanced  // 启用负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    //通过 @Bean 注解将 restTemplate() 方法返回的 RestTemplate 对象注册为 Spring 容器中的 Bean
    //该 RestTemplate 实例可以被其他组件通过依赖注入的方式使用
}
